#include "sbus.h"
#include "offline.h"
#include <rtthread.h>
#include <rtdevice.h>

sbus_s sbus;


void update_sbus(uint8_t *buf)
{
    sbus.SBUS_CH.CH1      = ((int16_t)buf[1] >> 0 | ((int16_t)buf[2] << 8)) & 0x07FF;
    sbus.SBUS_CH.CH2      = ((int16_t)buf[2] >> 3 | ((int16_t)buf[3] << 5)) & 0x07FF;
    sbus.SBUS_CH.CH3      = ((int16_t)buf[3] >> 6 | ((int16_t)buf[4] << 2) | (int16_t)buf[5] << 10) & 0x07FF;
    sbus.SBUS_CH.CH4      = ((int16_t)buf[5] >> 1 | ((int16_t)buf[6] << 7)) & 0x07FF;
    sbus.SBUS_CH.CH5      = ((int16_t)buf[6] >> 4 | ((int16_t)buf[7] << 4)) & 0x07FF;
    sbus.SBUS_CH.CH6      = ((int16_t)buf[7] >> 7 | ((int16_t)buf[8] << 1) | (int16_t)buf[9] << 9) & 0x07FF;
    sbus.SBUS_CH.CH7      = ((int16_t)buf[9] >> 2 | ((int16_t)buf[10] << 6)) & 0x07FF;
    sbus.SBUS_CH.CH8      = ((int16_t)buf[10] >> 5 | ((int16_t)buf[11] << 3)) & 0x07FF;
    sbus.SBUS_CH.CH9      = ((int16_t)buf[12] << 0 | ((int16_t)buf[13] << 8)) & 0x07FF;
    sbus.SBUS_CH.CH10     = ((int16_t)buf[13] >> 3 | ((int16_t)buf[14] << 5)) & 0x07FF;
    sbus.SBUS_CH.CH11     = ((int16_t)buf[14] >> 6 | ((int16_t)buf[15] << 2) | (int16_t)buf[16] << 10) & 0x07FF;
    sbus.SBUS_CH.CH12     = ((int16_t)buf[16] >> 1 | ((int16_t)buf[17] << 7)) & 0x07FF;
    sbus.SBUS_CH.CH13     = ((int16_t)buf[17] >> 4 | ((int16_t)buf[18] << 4)) & 0x07FF;
    sbus.SBUS_CH.CH14     = ((int16_t)buf[18] >> 7 | ((int16_t)buf[19] << 1) | (int16_t)buf[20] << 9) & 0x07FF;
    sbus.SBUS_CH.CH15     = ((int16_t)buf[20] >> 2 | ((int16_t)buf[21] << 6)) & 0x07FF;
    sbus.SBUS_CH.CH16     = ((int16_t)buf[21] >> 5 | ((int16_t)buf[22] << 3)) & 0x07FF;
    sbus.SBUS_CH.ConnectState = buf[23];
    if (sbus.SBUS_CH.ConnectState == 0X00)
    {
        offline_event_time_update(sbus.offline_manage_sbus.event);
    }
}

void sbus_clear(void){
    //rt_memset(&sbus.SBUS_CH, 0, sizeof(sbus.SBUS_CH));
    sbus.SBUS_CH.ConnectState = 0X0C;
}